/*
 * 英才汇硕信息科技有限公司 拥有本软件版权 2021 并保留所有权利。
 * Copyright 2021, YCHS Information&Science Techology Co.,Ltd,
 * All right reserved.
 */
package com.ychs.lawyerback.common;

import lombok.Data;

/**
 * @author mayujing
 * @version 1.0
 * （统一响应工具类）,实则就是按照枚举定义的规则，选择对应的状态吗和消息，
 * 同时还可以承载接口返回的业务数据，最终形成前端可以解析的标准化响应结果
 */
@Data
public class R<T> { // 泛型T表示返回的数据可以是任意类型
    private Integer code;// 状态码（比如200表示成功
    private String msg; // 提示消息
    private T data; // 具体数据（比如登录成功后的用户信息）

    public R() {
    }

    public R(ResultCode resultCode, T data) {
        this.code = resultCode.getCode();
        this.msg = resultCode.getMsg();
        this.data=data;
    }
    //登录成功且不带数据的情况（不返回用户信息，也就是data）
    public static <T> R<T> success() {
        return new R(ResultCode.SUCCESS,null);
    }
    //登录成功且带数据的情况（比如返回用户信息+令牌）
    public static <T> R<T> success(T data) {
        return new R(ResultCode.SUCCESS,data);
    }
    //整体失败的返回
    public static <T> R<T> fail() {
        return new R(ResultCode.ERROR,null);
    }
    //自定义一个错误
    public static <T> R<T> fail(ResultCode resultCode) {
        return new R(resultCode,null);
    }

    public static <T> R<T> fail(ResultCode resultCode,T data) {
        return new R(ResultCode.PARAMS_ERROR,data);
    }

    //自定义的异常抛出，这里是BussinessException里的
    public static <T> R<T> fail(Integer code, String message) {
        R r = new R();
        r.setCode(code);
        r.setMsg(message);
        return r;
    }
}
